package com.jiangyg.mall.coupon.service;

import com.jiangyg.mall.core.support.restful.Pagination;
import com.jiangyg.mall.coupon.dto.HomeAdvDTO;
import com.jiangyg.mall.coupon.vo.HomeAdvVO;

import java.util.List;

/**
 * 类描述：首页轮播广告
 *
 * @author jiangyg
 * @email email@jiangyg.com
 * @date 2021-10-18 21:33:06
 */
public interface HomeAdvService {

    /**
     * 功能描述：首页轮播广告分页查询
     *
     * @param pagination 分页参数
     * @return 返回分页信息
     */
    Pagination<HomeAdvVO> selectPagination(Pagination<HomeAdvVO> pagination) throws Exception;

    /**
     * 功能描述：保存或者修改首页轮播广告
     *
     * @param dto 首页轮播广告
     * @return 返回是否操作成功
     */
    boolean saveOrUpdate(HomeAdvDTO dto) throws Exception;

    /**
     * 功能描述：根据ID获取HomeAdv
     *
     * @param homeAdvId 首页轮播广告ID
     * @return 返回首页轮播广告
     */
    HomeAdvVO selectById(Long homeAdvId) throws Exception;

    /**
     * 功能描述：批量删除HomeAdv
     *
     * @param homeAdvIds 要删除的ID数组
     * @return 返回是否操作成功
     */
    boolean delete(List<Long> homeAdvIds);

    /**
     * 功能描述：切换广告状态事件
     *
     * @param dto 参数
     * @return 返回分页首页轮播广告
     */
    boolean switchStatus(HomeAdvDTO dto);

    /**
     * 功能描述：查询简化的首页广告（一般用于商城显示）
     *
     * @return 数据列表
     */
    String selectListByCache();

    /**
     * 功能描述：加载首页广告缓存
     */
    void loadCache();

    /**
     * 功能描述：记录首页广告点击次数
     * <p>使用 redis 记录一定时间内的点击次数，通过定时任务持久化次数到数据库</p>
     */
    void click(Long homeAdvId);

    /**
     * 功能描述：首页广告点击次数持久化到数据库
     */
    void clickCountDataPersistent();

    /**
     * 功能描述：清除无效的广告点击缓存
     */
    void cleanInvalidClickCountCache();

}

